//
// Description: 检测正方形
// Created by Loading on 2021/9/21.
//

#include <bits/stdc++.h>

using namespace std;

class DetectSquares {
public:
    DetectSquares() = default;

    void add(vector<int> point) {
        m_x[point[0]][point[1]]++;
        m_y[point[1]][point[0]]++;
    }

    int count(vector<int> point) {
        int res = 0;
        int x = point[0], y = point[1];
        // 遍历纵坐标
        for (auto it : m_y[y]) {
            // 距离为0
            if (it.first == x) {
                continue;
            }
            int dis = abs(it.first - x);
            // 向正方向搜寻
            if (m_x[x][y + dis] > 0) {
                if (m_x[it.first][y + dis] > 0) {
                    // 找到与目标点匹配的三个点，三个点个数相乘，即为正方形个数
                    res += it.second * m_x[x][y + dis] * m_x[it.first][y + dis];
                }
            }
            // 向负方向搜寻
            if (m_x[x][y - dis] > 0) {
                if (m_x[it.first][y - dis] > 0) {
                    // 找到与目标点匹配的三个点，三个点个数相乘，即为正方形个数
                    res += it.second * m_x[x][y - dis] * m_x[it.first][y - dis];
                }
            }
        }

        return res;
    }

private:
    // 横坐标，纵坐标，个数
    unordered_map<int, unordered_map<int, int>> m_x;
    // 纵坐标，横坐标，个数
    unordered_map<int, unordered_map<int, int>> m_y;
};

int main() {
    DetectSquares detectSquares;
    detectSquares.add({3, 10});
    detectSquares.add({11, 2});
    detectSquares.add({3, 2});
    int cnt = detectSquares.count({11, 10});
    cout << cnt << endl;
    cnt = detectSquares.count({14, 8});
    cout << cnt << endl;
    detectSquares.add({11, 2});
    cnt = detectSquares.count({11, 10});
    cout << cnt << endl;

    return 0;
}